from aiogram import Bot, F, Router
from aiogram.filters import Command
from aiogram.fsm.context import FSMContext
from aiogram.types import Message

from factories.keyboard import generate_form_keyboard as placeholder
from settings import settings
from utils import delete_message
from utils.states import Form_Antiklesh as Form

router = Router()


async def start_form_antiklesh(message: Message, state: FSMContext):
    await state.set_state(Form.insurer_name)
    await message.answer(
        "\n".join(
            [
                '<b>Анкета для страховки "АНТИКЛЕЩ"</b>',
                "Чтобы подать заявку на страховку необходимо заполнить анкету.",
                "Анкета сотоит из вух этапов:",
                " - Этап 1. Информация о страхователе (кто платит за полис)",
                " - Этап 2. Сведения о застрахованных лицах (на кого распространяется страховка)",
                "",
                "Пожалуйста, приготовьте паспорта, свидетельства о рождении и прочие документы удостоверяющие личность.",
            ]
        ),
    )
    await message.answer(
        "\n".join(
            [
                "<b>Этап 1.</b>",
                "Фамили Имя Отчество (если есть) страхователя.",
                "`Иванов Иван Иванович`",
            ]
        )
    )


@router.message(Form.insurer_name, F.content_type == "text")
async def _insurer_birthday(message: Message, state: FSMContext):
    await state.update_data(insurer_name=message.text)
    await state.set_state(Form.insurer_birthday)
    await message.answer(
        "\n".join(
            [
                "Введите Дату Рождения страхователя в формате:",
                "`31.12.1999`",
            ]
        )
    )


@router.message(Form.insurer_birthday, F.text.regexp(r"^\d{2}\.\d{2}\.\d{4}$"))
async def _insurer_address(message: Message, state: FSMContext):
    await state.update_data(insurer_birthday=message.text)
    await state.set_state(Form.insurer_address)
    await message.answer(
        "\n".join(
            [
                "Адрес регистрации (прописка) в формате:",
                "`664001, г Иркутск, ул Ленина, д 1/1, кв 99`",
            ]
        )
    )


@router.message(Form.insurer_address, F.content_type == "text")
async def _insurer_passport(message: Message, state: FSMContext):
    await state.update_data(insurer_address=message.text)
    await state.set_state(Form.insurer_passport)
    await message.answer(
        "\n".join(
            [
                "Данные ПАСПОРТА страхователя",
                "серия, номер, кем и когда выдан",
                "`2909 999000, УФМС России по г. Иркутск, 22.01.2030`",
            ]
        )
    )


@router.message(Form.insurer_passport, F.content_type == "text")
async def _insurer_contacts(message: Message, state: FSMContext):
    await state.update_data(insurer_passport=message.text)
    await state.set_state(Form.insurer_contacts)
    await message.answer(
        "\n".join(
            [
                "КОНТАКТЫ страхователя",
                "телефон и email для получения полиса",
                "`+7 (999) 999-99-99, mail@mail.ru`",
            ]
        )
    )


# @router.message(Form.is_male, F.caseFold().in_(["Муж", "Жен"]))
# async def fill_person_birthday(message: Message, state: FSMContext):
#     await state.update_data(is_male=True if message.text == "Муж" else False)
#     await state.set_state(Form.birthday)
#     await message.answer("Введите День рождения страхователя")
# reply_markup=placeholder(["Муж", "Жен"]


@router.message(Form.insurer_contacts, F.content_type == "text")
async def _add_insured_pesona(message: Message, state: FSMContext):
    await state.update_data(insurer_contacts=message.text)
    await state.set_state(Form.add_insured_persona)
    await message.answer(
        "\n".join(
            [
                "<b>Этап 2.</b>",
                "Теперь необходимо перечислить лиц для страхования.",
                "Вводите по одному, ФИО и дата рождения согласно формата:",
                "`Иванов Иван Иванович, 31.12.1999`",
            ]
        )
    )


@router.message(Form.add_insured_persona, Command("end"))
@router.message(Form.add_insured_persona, F.text.lower() == "закончить")
async def _finish(message: Message, state: FSMContext, bot: Bot):
    data = await state.get_data()
    await state.clear()
    await bot.send_message(
        chat_id=settings.bots.notification_channel_id,
        text= "\n".join([
            "Новая заявка на 'АНТИКЛЕЩ'",
            "Страхователь: " + data["insurer_name"],
            "Дата рождения: " + data["insurer_birthday"],
            "Адрес регистрации: " + data["insurer_address"],
            "Паспорт: " + data["insurer_passport"],
            "Контакты: " + data["insurer_contacts"],
            "",
            "Застрахованные лица: ", 
            ]+data["persona"],
        ))
    await message.answer(
        "\n".join(
            [
                "<b>Анкета завершена.</b>",
                "Спасибо за обращение.",
                "В ближайшее время с Вами свяжется Татьяна",
            ]
        )
    )

@router.message(Form.add_insured_persona)
async def _add_persona(message: Message, bot: Bot, state: FSMContext):
    data = await state.get_data()
    persona = data.get("persona", [])
    persona.append(message.text)
    await state.update_data(persona=persona)
    await state.set_state(Form.add_insured_persona)
    await message.answer(
        "\n".join(
            [
                "Введите данные о следующем лице",
                "Если Вы закончили, то нажмите /end",
            ]
        )
    )
